Field of the Invention
Embodiments of the present invention relate generally to three-dimensional (3D) computer animation and, more specifically, to an evaluation manager for 3D animation scenes.
Description of the Related Art
In the field of computer animation, the objects in 3D scenes are typically represented by a directed graph commonly referred to a dependency graph. The dependency graph, also referred to as a scene graph, includes nodes, where each node includes inputs, outputs, and attributes. Typically, a single dependency graph represents the entire 3D scene, where the nodes of the dependency graph represent 3D geometry objects, animation information, light sources, textures, expressions, and so on. Certain nodes in a dependency graph represents a location, such as a joint or muscle, on an object or character in an animation, whose movement can be controlled. During each time step of the animation, one or more controllers apply forces to the various nodes, causing the associated joints or muscles to move in response. Among other things, the dependency graph identifies the relationships among the different nodes, and, more specifically, defines how specific nodes move in response to particular movements effected at a given related node. For example, a controller could apply a twisting force to a node corresponding to the hips of a particular object. The dependency graph would identify related nodes that also move when the hips of the object receive the twisting force. That is, the dependency graph would specify how other nodes, corresponding to the legs, arms, upper body, and head of the object, move when a twisting force is applied to the hip node.
After all nodes in the dependency graph are evaluated for a particular time step, the time advances to the next time step. The nodes in the dependency graph are again evaluated based on the forces applied to various nodes at the new time step. By applying forces to the different nodes at each time step and evaluating the nodes within the dependency graph at each time step based on those forces, the locations of each node in the dependency graph are computed over time. As the different nodes “move” to those locations over time, the various objects in the 3D scene are “animated” and appear to move within the 3D scene. In addition to advancing the time step, other changes can cause nodes of the dependency graph to be evaluated. For example, changing the rotation value of a joint on an animated character causes the node representing that joint to be evaluated, along with other nodes that are dependent on the node representing the joint.
One drawback of using dependency graphs to animate objects in a 3D scene is that, in general, each node of the dependency graph is evaluated completely at each time step. However, some objects in the 3D scene may not move as time advances from one time step to the next time step because either the objects are static and do not move, or the objects are simply not in motion at particular time steps. As a result, processing resources are unnecessarily consumed when nodes that do not move between time steps are evaluated. Another drawback of using dependency graphs is that identifying node subsets within the dependency graph to evaluate in parallel is generally difficult. Consequently, most nodes within dependency graphs are evaluated in a serial, single-threaded fashion, which results in longer evaluation times when animating objects in a 3D scene.
As the foregoing illustrates, what is needed are more effective ways to animate objects in a 3D scene.